#ifndef __BOARD_H__
#define __BOARD_H__


/* STM32 固件库头文件 */
#include "stm32f10x.h"

/* RT-Thread相关头文件 */
#include <rthw.h>
#include <rtthread.h>

/* 开发板硬件bsp头文件 */
#include "bsp_usart.h"
#include "bsp_gpio.h"
#include <stdio.h>
#include <stdint.h>

//#include "modbus_slave.h"
//#include "modbus_host.h"
//#include "SHT2x.h"

// 定义hx711滑动平均滤波的窗口大小
#define FILTER_WINDOW_SIZE 5
// 滑动平均滤波数组和索引
extern int32_t weight_filter_buffer[FILTER_WINDOW_SIZE];
extern int filter_index;

// 定义角度滑动平均滤波的窗口大小
#define ANGLE_FILTER_WINDOW_SIZE 5
// 角度滑动平均滤波数组和索引
extern uint16_t angle_filter_buffer[ANGLE_FILTER_WINDOW_SIZE];
extern int angle_filter_index;

// 假设角度范围为 0 - 315 度
#define ANGLE_MIN 0.0
#define ANGLE_MAX 315.0
//ADC范围 0 - 4095
#define ADC_MIN 0
#define ADC_MAX 4095

#define BREAK_TIMEOUT_SEC 30
#define EPC_NUM_MAX  20
#define EPC_BYTE_NUM 12
#define ANT_NUM 8
#define TAG_DATA_MAX 256


//命令执行状态
#define CMD_WAIT	1	//等待命令回复
#define CMD_ERR		4	//命令已经回复，报错
#define CMD_OK		5	//命令已经回复，未报错


#define MOD_REG_EPC_MAX 20				//EPC最大的长度
#define MOD_REG_DATA_MAX 200			//内存区域最大的长度
//typedef struct
//{
//	uint8_t EPC[EPC_BYTE_NUM];						//当前设备的读到的EPC编码
//	uint8_t DATA[MOD_REG_DATA_MAX];						//当前设备的读到的EPC编码	
//	uint8_t PaR;										//设备读取功率
//	uint8_t PaW;										//设备写入功率
//	uint8_t mode;										//设备工作模式
//	uint8_t cardState;									//当前读到的卡片数量，为1时是正常	
//	uint8_t memStart;									//读取标签的内存起始位置
//	uint8_t memNum;										//读取标签的内存数量

//	//以下是需要开机保存的配置
//	uint8_t modbusAdd;									//MODBUS设备地址	
//	uint8_t baud;										//MODBUS通讯波特率
//	uint8_t clear;										//标签的缓存清空时间，单位10ms
//}_ModBus_t;

#define MOTOR_CD_MAX 		20000			//铲刀电机的最大位置


typedef struct
{
	uint8_t cdState;		//铲刀电机的运行状态
	uint8_t cdMode;			//铲刀电机的运行模式
	uint8_t cdDir;			//铲刀电机的运行方向
	uint32_t cdPulse;		//铲刀电机的运行脉冲
	uint32_t cdAddPulse;	//铲刀电机当前的脉冲位置

	uint8_t xmState;		//卸模板电机的运行状态		
	uint8_t xmMode;			//卸模板电机的运行模式
	uint8_t xmDir;			//卸模板电机的运行方向
	uint32_t xmPulse;		//卸模板电机的运行脉冲
	uint32_t xmAddPulse;	//卸模电机当前的脉冲位置	
	
	uint8_t  bAxisState;		//翻转电机的运行状态		
	uint8_t  bAxisMode;			//翻转电机的运行模式
	uint8_t  bAxisDir;			//翻转电机的运行方向
	int32_t bAxisPulse;		//翻转电机的运行脉冲
	int32_t bAddPulse;			//翻转电机当前的脉冲位置	
	/*****///用于PID移动调节参数
	uint8_t	bSpeed;				//速度，0~100
	uint8_t 	bSpeedTick;			//记录速度节拍
	uint32_t bstepTick;		//翻转电机的运行脉冲
	/*****/
	uint8_t  EState;		//翻转电机的运行状态		
	uint8_t  EMode;			//翻转电机的运行模式
	uint8_t  EDir;			//翻转电机的运行方向
	uint32_t EPulse;		//翻转电机的运行脉冲
	uint32_t EAddPulse;			//翻转电机当前的脉冲位置		
	



}_MOTOR_T;
typedef struct
{
	uint32_t	tickSec;
	uint32_t	timtick;
	uint16_t	deviceAdd;								//从机的地址

//	uint16_t fAngleX;							
//	uint16_t fAngleY;
//	int16_t TableAngle;		//当前角度
//	uint16_t fAngleZ;				
//	int16_t  temp;				//打印仓温度
//	int16_t	hum;				//打印仓湿度
//	int16_t	Zhigh;				//打印仓湿度	
//	int16_t  Roomtemp;		//环境温度
//	int16_t	Roomhum;			//环境湿度
//	int16_t	FilaTick;		//耗材移动脉冲
//	uint16_t	FilaDist;		//耗材移动距离，单位为mm
	_MOTOR_T motor;			//电机运行控制
//	
//	uint16_t Fila1Pass1;		//卡片1密码
//	uint16_t Fila1Pass2;
//	uint16_t Fila1Pass3;
//	uint16_t Fila1Data1;		//卡片1数据
//	uint16_t Fila1Data2;
//	uint16_t Fila1Data3;
//	uint16_t Fila1Data4;
//	
//	uint16_t Fila1UID1;         //  UID
//    uint16_t Fila1UID2;
//    uint16_t Fila1UID3;
//    uint16_t Fila1UID4;
//	// 打印头相关变量
//	int16_t printHeadHeatTemp;    // 打印头加热设定温度（默认0℃）
//	int16_t printHeadCurTemp;       // 打印头当前温度
//	uint16_t hFanState;             // 喉管风扇状态（0:关闭，1:打开）
//	uint16_t pFanSpeed;            // 打印头风扇速度（0-100）
//	uint16_t LogoState;             // 打印头LOGO灯状态（0:关闭，1:打开）

//	uint8_t keyState;						//开关机按键状态

}_Main_t;

typedef struct
{
	uint8_t modbusAdd;					//MODBUS设备地址
	uint8_t baud;						//MODBUS通讯波特率
}_Sys_t;


void IWDG_Feed_Init( u16 prer, u16 rlr )	;
void IWDG_Feed(void);

#endif /* __BOARD_H__ */
